这两周接触了小程序感觉把大部分的坑都踩了下
看到小程序能写es6语法
es6语法有什么好处呢!就去看了看下面我来说说我学到的

Class

ES6中添加了对类的支持,引入了class关键字,想了解ES5对象语法的可以敲javascript中的面向对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//定义类
class Cons{
constructor(name,age){

this.name = name;
this.age = age;

}

getMes(){

console.log(`hello ${this.name} !`);

}

}
let mesge = new Cons('啦啦啦~',21);
mesge.getMes();

//继承

class Ctrn extends Cons{
constructor(name,anu){

super(name); //等同于super.constructor(x)
this.anu = anu;

}

ingo(){
console.log(`my name is ${this.name},this year ${this.anu}`);
}

}
let ster = new Ctrn('will',21);
ster.ingo();
ster.getMes();

箭头操作符

新增的箭头操作符=>便有异曲同工之妙。它简化了函数的书写

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [1, 2, 3];

//ES5

arr.forEach(function(x) {

console.log(x);

});

//ES6

arr.forEach(x = > console.log(x));

解构赋值

数组中的值会自动被解析到对应接收该值的变量中

1
2
3
var [name,,age] = ['will','lala','21'];

console.log('name:'+name+', age:'+age);//输出:name:will, age:21

默认参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//ES5

function fn(name){
var name=name||'will';
console.log('my name is '+name);
}

//ES6

function fn(name='will'){

console.log(`my name is ${name}`);

}

多行字符串

使用反引号`来创建字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
var str = 'The 3.1 work extends XPath and'
+'XQuery with map and array data structures'
+'along with additional functions and operators'
+'for manipulating them; a primary motivation'
+'was to enhance JSON support.';

//ES6

var roadPoem = `The 3.1 work extends XPath and
XQuery with map and array data structures
along with additional functions and operators
for manipulating them; a primary motivation
was to enhance JSON support.`;

字符串模板

由美元符号加花括号包裹的变量${name}

1
2
3
var name = 'will';

console.log(`my name is ${name}`);

扩展运算符

在函数中使用命名参数同时接收不定数量的未命名参数,在以前的JavaScript代码中我们可以通过arguments变量来达到这一目的。而ES6中是如下实现的

1
2
3
4
5
6
7
8
9
function add(...x){

return x.reduce((m,n)=>m+n);

}

console.log(add(1,2,3));//输出:6

console.log(add(1,2,3,4,5));//输出:15

块级作用域

let与const 关键字!可以把let看成var,它定义的变量被限定在了特定范围内。const则用来定义常量,即无法被更改值的变量。共同点都是块级作用域。

1
2
3
4
5
6
7
8
9
10
11
12
13
//let

for (let i=0;i<2;i++){

console.log(i);//输出: 0,1

}
console.log(i);//输出:undefined

//const

const name='a';
name='b'; //报错

模块

在ES6标准中支持module了,将不同功能的代码分别写在不同文件中,各模块只需使用export导出公共接口部分,然后通过使用module模块的导入的方式可以在其他地方使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// b.js

function fn(){

console.log('hello world');

}

export fn; // a.js

module { fn } from "./b";

fn();

//然后在HTML引入a文件运行浏览器

for or

我们都知道for in循环用于遍历数组,类数组或对象,ES6中新引入的for of循环功能相似,不同的是每次循环它提供的不是序号而是值。

1
2
3
4
5
6
var arr = [ "a", "b", "c" ]; 
for (v of arr) {

console.log(v);//输出 a,b,c

}

了解更多 可以查看阮一峰的ECMAScript